﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using com.clinica.business.BE.acttar;
using com.clinica.business.BE.comun;
using LiclUtil;
using LiclActTar;
using LiclActTar.Views;
using System.Text;

namespace wesiGestClinica.acttar.Controles
{
    public partial class UCAgregarServicios : System.Web.UI.UserControl
    {
        LiclTarifariosController oController = new LiclTarifariosController();
        protected void Page_Load(object sender, EventArgs e)
        {
            string Mensaje = "Debe Ingresar factor en la pantalla previa.";
            try
            {
                if (!Page.IsPostBack)
                {
                    lbl_TituloModulo.Text = "Búsqueda de Servicios";
                    ListaServiciosADD = (List<ServiciosBE>)Session["ListaServiciosAdd"];
                    CargarTipoCalculo();
                    IniciarControles();                    
                }
                              
                lblMensaje.Visible = false;
            }
            catch (Exception ex)
            {
                lblMensaje.Visible = true;
                lblMensaje.Text = lblMensaje.Text + ex.Message;
            }
            if (FactorDetras == null)
            {
                FactorDetras = 0.00M;                
                lblMensaje.Visible = true;
                lblMensaje.Text = Mensaje;
            }
            else if (FactorDetras == 0)
            {
                lblMensaje.Visible = true;
                lblMensaje.Text = Mensaje;
            }
            btnGrabarControl.Click += new EventHandler(btnGrabarControl_Click);
            btnGrabarControl.Attributes.Add("onClick", "if(!window.confirm(' Desea Guardar servicio'))return false;");
            btn_Calcular.Click += new EventHandler(btn_Calcular_Click);
            rbl_Calculo.SelectedIndexChanged += new EventHandler(rbl_Calculo_SelectedIndexChanged);
        }       
              
        #region Eventos
        void rbl_Calculo_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (rbl_Calculo.SelectedValue)
            {
                case "1":
                    txt_ValorControl.ReadOnly = true;
                    txt_UnidadSEGUSControl.ReadOnly = true;
                    txt_ValorControl.Text = "0.00";
                    txt_DescuentosControl.Text = "0.00";
                    txt_PrecioControl.Text = "0.00";
                    break;
                case "2":
                    txt_ValorControl.ReadOnly = false;
                    txt_ValorControl.Text = "0.00";                 
                    txt_DescuentosControl.Text = "0.00";
                    txt_PrecioControl.Text = "0.00";
                    break;
                default:
                    break;
            }
        }
        void btn_Calcular_Click(object sender, EventArgs e)
        {
            Calcular(0);
        }
        protected void btnGrabarControl_Click(object sender, EventArgs e)
        {
            Calcular(1);
        }
        #endregion
        #region Metodos
        public void Calcular(int Origen)
        {
            List<ServiciosBE> lst = new List<ServiciosBE>();
            ServiciosBE oServ = new ServiciosBE();
            if (ValidarGrabacion())
            {
                if (rbl_Calculo.SelectedValue == "1")
                {
                    if (FactorDetras!=null)
                        txt_ValorControl.Text = (decimal.Parse(txt_UnidadSEGUS.Text) * FactorDetras).ToString("##.##");
                }
                oServ.TipoCalculo = int.Parse(rbl_Calculo.SelectedValue);
                oServ.DescripcionTipoCalculo = rbl_Calculo.SelectedItem.Text;
                oServ.Codigo = int.Parse(txt_CodigoServicio.Text);
                oServ.Descripcion = txt_DescripcionServicio.Text.Trim();
                oServ.Unidades = txt_UnidadSEGUS.Text;
                oServ.ValorCalculo = decimal.Parse(txt_Valor.Text.Trim() == string.Empty ? "0.00" : txt_Valor.Text);
                oServ.ValorDescuento = decimal.Parse(txt_Valor.Text) - ((decimal.Parse(txt_Valor.Text) * decimal.Parse(txt_Descuentos.Text)) / 100);
                oServ.PorcentajeDescuento = decimal.Parse(txt_Descuentos.Text);
                oServ.Precio = decimal.Parse(txt_Valor.Text) - ((decimal.Parse(txt_Valor.Text) * decimal.Parse(txt_Descuentos.Text)) / 100);
                txt_PrecioControl.Text = oServ.Precio.ToString("####.##");
                if (Origen == 1)
                {
                    lst.Add(oServ);
                    ListaServiciosADD = lst;
                }
            }
        }
        public bool ValidarGrabacion()
        {
            bool Val = true;
            StringBuilder strError = new StringBuilder();
            #region Validando Inconsistencias
            if (txt_CodigoServicio.Text.Trim() != string.Empty)
            {
                if (FactorDetras == null)
                {
                    Val = false;
                    strError.Append("Debe Ingresar Un Factor en la pantalla previa.");
                }
                else if (FactorDetras == 0)
                {
                    Val = false;
                    strError.Append("Debe Ingresar Un Factor en la pantalla previa.");
                }

                try
                {
                    int.Parse(txt_CodigoServicio.Text.Trim());
                }
                catch (Exception)
                {
                    Val = false;
                    strError.Append("Debe Buscar Un servicio. El código de Servicio presenta un error");
                }
            }
            if(rbl_Calculo.SelectedValue=="2")
                if (txt_Valor.Text.Trim() == "0.00" || txt_Valor.Text.Trim() == "0")
                {
                    Val = false;
                    strError.Append("Debe ingresar un Valor. se presenta un error");
                }            
            try
            {
                decimal.Parse(txt_Descuentos.Text);
            }
            catch (Exception)
            {
                Val = false;
                strError.Append("Debe ingresar un descuento. se presenta un error");
            }
            try
            {
                decimal.Parse(txt_UnidadSEGUS.Text);
            }
            catch (Exception)
            {
                Val = false;
                strError.Append("Debe ingresar una Unidad Segus al servicio. se presenta un error");
            }
            try
            {
                decimal.Parse(txt_Valor.Text.Trim());
            }
            catch (Exception)
            {
                Val = false;
                strError.Append("Debe Buscar Un servicio. El Valor de Servicio presenta un error");
            }          
            #endregion
            #region Validando Lista
            if (ListaServiciosADD != null)
            {
                if (ListaServiciosADD.Count > 0)
                {
                    bool fount = false;
                    foreach (ServiciosBE item in ListaServiciosADD)
                    {
                        if (item.Codigo==int.Parse(txt_CodigoServicio.Text.Trim()))
                            fount = true;
                    }
                    if (fount)
                    {
                        Val = false;
                        string Mensaje= "Debe Buscar otro servicio. El código: "+ int.Parse(txt_CodigoServicio.Text.Trim()) + " ya fue ingresado";
                        strError.Append(Mensaje);
                    }
                }
            }

            #endregion
            if (!Val)
            { 
             lblMensaje.Visible = true;
             lblMensaje.Text = lblMensaje.Text + strError.ToString();
            
            }
            return Val;
        }
        
        private void IniciarControles()
        {
            txt_CodigoServicio.Text = string.Empty;
            txt_DescripcionServicio.Text = string.Empty;
            txt_UnidadSEGUS.Text = "0.00";
            txt_Valor.Text = "0.00";
            txt_Descuentos.Text = "0.00";
            txt_Precio.Text = "0.00";
            rbl_Calculo.Items[0].Selected = true;
        }
        public void IngresandoLista(List<ServiciosBE> lst)
        {
            ListaServiciosADD = lst;
        }
        public void CargarTipoCalculo()
        { 
            ParametrosBE oParm = new ParametrosBE();
            oParm.NombreTabla = "TIPCALC";
            rbl_Calculo.DataSource = oController.Obtener_Tabla(oParm);
            rbl_Calculo.DataValueField = "Codigo";
            rbl_Calculo.DataTextField = "DescripcionCorta";
            rbl_Calculo.DataBind();
        }
        #endregion
        #region Propiedades
        public string Origen { get; set; }

        public Button btnGrabar
        {
            get { return btnGrabarControl; }
            set { btnGrabarControl = value; }
        }
        public Button btnCerrar
        {
            get { return btnCerrarControl; }
            set { btnCerrarControl = value; }
        }
        public Button btn_Buscar
        {
            get { return btn_BuscarControl; }
            set { btn_BuscarControl = value; }
        }
        public TextBox txt_CodigoServicio
        {
            get { return txt_CodigoServicioControl; }
            set { txt_CodigoServicioControl = value; }
        }
        public TextBox txt_DescripcionServicio
        {
            get { return txt_DescripcionServicioControl; }
            set { txt_DescripcionServicioControl = value; }
        }
        public TextBox txt_UnidadSEGUS
        {
            get { return txt_UnidadSEGUSControl; }
            set { txt_UnidadSEGUSControl = value; }
        }
        public TextBox txt_Valor
        {
            get { return txt_ValorControl; }
            set { txt_ValorControl = value; }
        }
        public TextBox txt_Descuentos
        {
            get { return txt_DescuentosControl; }
            set { txt_DescuentosControl = value; }
        }
        public TextBox txt_Precio
        {
            get { return txt_PrecioControl; }
            set { txt_PrecioControl = value; }
        }
        public RadioButtonList rbl_Calculo
        {
            get { return rbl_CalculoControl; }
            set { rbl_CalculoControl = value; }
        }
        public List<ServiciosBE> ListaServiciosADD 
        {
            get { return (List<ServiciosBE>)Session["ListaServiciosAdd"]; }
            set { Session["ListaServiciosAdd"] = value; }
        }
        public decimal FactorDetras
        {
            get { return (decimal)Session["Factor"]; }
            set { Session["Factor"] = value; }
        }
        #endregion

       
    }
}